package br.unicamp.ic.inf300.arena.facade;

import br.unicamp.ic.inf300.arena.modelo.vendas.servico.ITransacaoVendaServico;
import br.unicamp.ic.inf300.arena.modelo.vendas.servico.impl.TransacaoVendaServico;

/**
 * Fabrica de fachadas com o proposito de instanciar fachadas ou servicos mas expor estes para
 * seus clientes (classes do tipo ActionBean) a partir de interfaces.
 * 
 * Boas praticas:
 * 
 * a) Programe utilizando interagindo com objetos colaboradores por meio de interfaces, minimiza problemas
 * de mudanca na implementacao (principio elementar de design by contract)
 * 
 * b) Padrao de projeto facade.
 *
 * "Oferecer uma interface unica para um conjunto de interfaces de um subsistema. Facade define uma
 * interface de nivel mais elevado (macro funcionalidades) que torna o subsistema mais facil de usar." [GoF]
 *
 */
public class FacadeFactory {
	
	public static IEventoFacade criarFacadeEvento() {
		return new EventoFacade();
	}

	public static ITransacaoVendaServico criarServicoTransacaoVenda() {
		return new TransacaoVendaServico();
	}

	public static IControleAcessoFacade criarFacadeControleAcesso() {
		return new ControleAcessoFacade();
	}
}